--1、参数列表
--1、1 优惠券id
local voucherId = ARGV[1]

--1.2用户id
local userId = ARGV[2]

--订单ID
local orderId = ARGV[3]


--操作的数据key
--库存key
local stockKey = 'seckill:stock:' .. voucherId

--订单key
local orderKey = 'seckill:order:' .. voucherId

--将数据io判断库存，用户是否买过，移动到redis缓存中来，减少数据库io，加快秒杀速度
--之后使用分布式锁即可保证一人一单问题

--3、脚本业务
--3.1 判断库存是否充足
if(tonumber(redis.call('get',stockKey)) <= 0) then
    --3.2 库存不足，返回1
    return 1
end

--3.3 判断用户是否下单 SISMEMBER  orderKey 但没有这个订单，间接实现分布式锁
if(redis.call('sismember',orderKey,userId) == 1) then
    --重复下单
    return 2
end

--3.4 扣库存下单 incrby stockKey -1
redis.call('incrby',stockKey, -1)


--3.5 添加用户id，判断用户是否买过
redis.call('sadd',orderKey,userId)

--3.4 发送消息消息队列,* 消息的id,不确定是*
redis.call('xadd','stream.orders','*','userId',userId,'voucherId',voucherId,'id',orderId)

return 0






